package com.efounder.frame.baseui;

import android.os.Bundle;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import android.view.View;

/**
 * fragment的懒加载
 * Created by admin on 2017/7/1.
 */

public abstract class BaseLazyFragment extends BaseFragment {

    //    第一次可见状态、可见状态、
    private boolean isFirstVisible = true;
    //    第一次不可见状态、不可见状态
    private boolean isFirstInvisible = true;
    private boolean isPrepared;

    // 标示是否第一次初始化数据
    protected boolean mIsFirstInitData = true;
    @Override
    public void onActivityCreated(@Nullable Bundle savedInstanceState) {
        super.onActivityCreated(savedInstanceState);
    }

    @Override
    public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) {
        super.onViewCreated(view, savedInstanceState);
        if (mIsFirstInitData) {
            // 触发一次以后就不会触发
            mIsFirstInitData = false;
            // 触发
            onFirstInit();
        }
    }
    /**
     * 第一次初始化时加载此方法
     */
    protected void onFirstInit() {
        initPrepare();
    }

    //  准备时用个同步锁： synchronized
    private synchronized void initPrepare() {
        if (isPrepared) {
            onFirstUserVisible();
        } else {
            isPrepared = true;
        }
    }

    @Override
    public void setUserVisibleHint(boolean isVisibleToUser) {
        super.setUserVisibleHint(isVisibleToUser);
        if (isVisibleToUser) {
            if (isFirstVisible) {
                isFirstVisible = false;
                initPrepare();
            } else {
                onUserVisible();
            }
        } else {
            if (isFirstInvisible) {
                isFirstInvisible = false;
                onFirstUserInvisible();
            } else {
                onUserInvisible();
            }
        }
    }
    @Override
    public void onDestroy() {
        DestroyView();
        super.onDestroy();
    }

    /**
     *销毁 Fragment 时，可能需要做些 解除广播绑定，服务之类
     */
    protected abstract void DestroyView();
    //  加载数据 / 开启动画 / 广播.....
    protected void onFirstUserVisible(){

    };
    /**
     * 在ViewPager中切换fragment时，当前fragment显示时走此方法
     */
    protected abstract void onUserVisible();

    public  void onFirstUserInvisible() {

    }
    /**
     * 在ViewPager中切换fragment时，当前fragment不显示时走此方法
     */
    protected abstract void onUserInvisible();
}
